Literal sharing method for fast sum-of-products logic

ABSTRACT

A method and apparatus for implementing fast sum-of-products logic in a field programmable gate array (FPGA) is disclosed. The method includes literal-sharing decomposition of the sum-of-products logic to reduce the number of configurable logic block (CLB) slices required to implement wide fan-in logic functions on an FPGA. The decomposition is performed by combining product terms having similar literal patterns. The apparatus includes a CLB including a plurality of slices and a second-level logic (separate from the slices) circuit to combine the outputs of the slices. Typically, the second-level logic is an OR gate or its equivalent that implements the sum portion of the sum-of-products expression. Alternatively, a combining gate may be included within the slice to combine the output of the slice with the output of another slice preceding the first slice.

BACKGROUND

This invention relates to programmable integrated circuit devices. Morespecifically, the present invention relates to field programmable gatearrays (FPGAs).

An FPGA is a type of programmable logic device (PLD) that can beconfigured to perform various logic functions. An FPGA includes an arrayof configurable logic blocks (CLBs) connectable via programmableinterconnect structures. For example, a first FPGA, invented by Freeman,is described in U.S. Pat. RE34,363. CLBs and interconnect structures inFPGAs are shown in U.S. Pat. No. 5,889,411 issued to Chaudhary et al.and pages 4–32 through 4–37 of the Xilinx 1996 Data Book entitled “TheProgrammable Logic Data Book” available from Xilinx, Inc., 2100 LogicDrive, San Jose, Calif. 95124. The Freeman reference, the Chaudharyreference, and the Data Book are incorporated herein by reference.

In addition to the structures discussed above, FPGAs also includestructures for performing special functions. In particular, FPGAsinclude carry circuits and lines for connecting the carry output of onebit generated in one CLB to the carry input of another CLB, and cascadelines for allowing wide functions to be generated by combining severaladjacent CLBs. Carry structures are discussed by Hsieh et al. in U.S.Pat. No. 5,267,187 and by New in U.S. Pat. No. 5,349,250.

Cascade structures are discussed by Goetting et al in U.S. Pat. No.5,365,125 and by Chiang et al. in U.S. Pat. No. 5,357,153. These patentsare also incorporated herein by reference.

As discussed by the above-incorporated references, each CLB may includeone or more slices (“slice” or “CLB slice”). Each slice, in turn,includes at least one configurable function generator. The configurablefunction generator is typically implemented as a four-input lookup table(LUT). The incorporated references also point out that the carrycircuits and cascade structures increase the speed at which the FPGA canperform certain functions, such as arithmetic functions.

FIG. 1A is a simplified block diagram of a conventional CLB 100. Theillustrated CLB 100 includes a first slice 110 and a second slice 120.First slice 110 includes a first function generator G 112, a secondfunction generator F 114, a third function generator 116, and an outputcontrol block 118. Output control block 118 may include multiplexers,flip-flops, or both. Four independent input terminals are provided toeach of the G and F function generators 112 and 114. A single inputterminal C1-in is provided to third function generator C1 116. Each offunction generators 112 and 114 is typically implemented as a four-inputLUT, and is capable of implementing any arbitrarily defined Booleanfunction of the inputs signals. Each of the input terminals may beassigned a number or a letter and referred to as a “literal.” Forexample, in CLB 100, function generator 112 receives four input signals,or literals, G1, G2, G3, and G4. Function generator 116, typicallyimplemented as a set of configurable multiplexers, is often used tohandle carry bits, but can implement some Boolean functions of its threeinput signals C1-in, G′, and F′. These Boolean functions include bypass,inverter, 2-input AND (product), and 2-input OR (sum). Signals G′, F′,and C1-out are multiplexed through output control block 118. Multiplexer118 provides output signal lines Y, QY, X, and QX. For this reason,output control block 118 may also be referred to as the “outputmultiplexer” or “output select multiplexer.” Slice 110 may also providethe carry out signal, C1-out. Second slice 120 is similar to first slice110. Accordingly, operations of second slice 120 are similar to theoperations of first slice 110.

Operation of CLB 100 is also described by the incorporated references,and, in particular, in chapters seven and eight of theabove-incorporated Data Book. For simplicity, CLB 100 of FIG. 1 isillustrated with two slices; however, the number of slices constitutinga CLB is not limited to two.

FIG. 1B is a simplified block diagram of another conventional CLB 100 a.CLB 100 a is similar to CLB 100 of FIG. 1A but has an additional LUT113. LUT 113 takes outputs of LUT 112 and 114 as well as another inputK1 to slice 110 a. Thus, LUT 113 allows slice 110 a to implement anyarbitrarily defined Boolean function of nine literals G1, G2, G3, G4,F1, F2, F3, F4, and K1. CLB 110 a may include additional slicesrepresented by ellipses 120 a.

Technology mapping for LUT-based FPGAs involves decomposition of acircuit into combinational logic having nodes with 4-input (“fan-in”)functions that can be realized in the LUTs of CLB slices. This isbecause, as shown in slice 110, the slices commonly include 4-input LUTsas their function generators. By conventionally specifying the functionsof function generators F, G, and C1, and output control block 118, slice110 can be programmed to implement various functions including, withoutlimitation, two independent functions of up to four variables each.

Circuit designs are mapped to FPGAs as combinational logic. Thecombinational logic may be expressed in Boolean expressions including anumber of logic levels and routing between the logic levels. The Booleanexpressions include product (logical AND) and sum (logical OR)operations. Two levels of combinational logic may be expressed usingsum-of-products (SOP) format. In fact, given a set of inputs and theirinverse, any logic equation can be expressed using the SOP format.

In the FPGA art, there is a continuing challenge to increase speed(performance) of FPGA-implemented functions, or circuits. Circuitperformance, or speed, is increased when circuit delay is decreased.Circuit delay includes two main components: logic delay and routingdelay.

Using logical axioms and Boolean algebraic rules, it is possible topartially collapse a circuit design to reduce the number of logiclevels, thus reducing the routing delay. However, this creates widefan-in nodes. The wide fan-in nodes require use of several levels ofLUTs for implementation. This is because, as described above, the LUTshave limited fan-in, for example fan-in of four. Therefore, to implementwide fan-in nodes, multiple levels of CLBs must be used. The requirementto use multiple levels of CLBs increases the logic delay as well ascreating other routing delays. These negative effects cancel out thebenefits from the routing delay reduction provided by the partialcollapse of the circuit design.

Accordingly, there is a need for a method to implement wide fan-in nodesin FPGAs while avoiding the negative effects described above.Additionally, there is a need for CLB and CLB slice designs that allowfor fast implementation of wide fan-in SOP functions.

SUMMARY

According to one aspect of the present invention, there is provided aliteral-sharing decomposition method for combinational logic circuitsexpressed as a sum of product terms. A first product term (P1) iscombined with a second product term (P2) resulting in a product chainP1+P2 if P1 may be implemented in a number of configurable logic block(CLB) slices and the product chain P1+P2 may be implemented on the samenumber of configurable logic block (CLB) slices. The product chain isthen used to configure CLB slices to implement the product terms.Because the product terms are combined, they can be implemented usingfewer CLB slices than the number of slices needed for separateimplementation. The reduction in the number of slices leads to fasterimplementation.

A “product chain” is a combination of product terms (“Pterms”) thatshare one or more literals. A product chain would typically include atleast two Pterms; however, a single Pterm may be designated as a productchain to which other Pterms may be combined. A Pterm or a product chainmay be implemented on one or more CLB slices. A “slice chain” is one ormore slices configured to implement a Pterm or a product chain.

The first step in the literal-sharing decomposition method is toidentify the Pterm having the highest number of literals and defining itas a product chain. Second, from the remaining Pterms, the Pterm havingthe highest number of literals is selected. Third, if the selected Ptermfits any of the product chains, then the selected Pterm is combined withone of the product chains. If a fit is not found, then the selectedPterm becomes another product chain. Finally, the second and the thirdsteps are repeated for the remaining Pterms until all Pterms have beenexamined.

Any sum-of-products (SOP) function can be represented using a“personality matrix” that expresses the logical behavior, or“personality,” of the circuit. One embodiment of the literal-sharingdecomposition process uses personality matrices to simplify thedecomposition process. First, a personality matrix is formed for thecombinational logic, the personality matrix having rows, each rowrepresenting a product term and showing the literals for the productterm of that row. The rows are sorted in descending order based on thenumber of literals in each row.

The first row in the sorted personality matrix is defined as a productchain. Then, each row is analyzed as follows: (1) the following row isdesignated a current row; (2) a determination is made as to whether thecurrent row fits into any product chain; (3) if the current row does notfit into any product chain, then the current row is designated as a newproduct chain; and (4) if the current row fits into an existing productchain, then the current row is combined into the existing product chainwith the best fit.

According to a second aspect of the present invention, a technologymapping system is disclosed. The system has a processor and memoryconnected to the processor. The memory stores programs to instruct theprocessor to decompose combinational logic circuit expressed insum-of-products format. The decomposition process is similar to theprocesses summarized in the preceding paragraphs and disclosed in detailin the following sections.

According to a third aspect of the invention, an article of manufacturefor a computer is disclosed. The article may be a machine-readablestorage device, such as computer memory, adaptable to hold a program fora processor. The program, when executed, causes the computer to performthe literal-sharing decomposition steps summarized in the precedingparagraphs and disclosed in detail in the following sections.

According to a fourth aspect of the invention a programmable logicdevice (PLD) is configured to implement a combinational logic circuitmapped to the PLD in accordance with the literal-sharing decompositionsteps summarized in the preceding paragraphs and disclosed in detail inthe following sections.

According to a fifth aspect of the invention, a CLB has two or moreslices, each slice having an output. The CLB also includes asecond-level circuit for combining the outputs from the slices.

According to a sixth aspect of the invention, a CLB has at least oneslice. The slice has at least two configurable function generatorsreceiving a plurality of inputs and generating, together, a firstoutput. The slice also includes a combining gate for combining the firstoutput with a combining gate input to generate a combining gate outputwherein the combining gate input is an input to the first CLB slice andwherein combining gate output is an output of the first CLB slice.

According to a seventh aspect of the invention, a CLB has at least oneslice. The slice has a first configurable function generator generatinga first output, a second configurable function generator generating asecond output, and a dedicated function generator for receiving thefirst output and the second output to generate a dedicated output. Thededicated function generator includes a first logic gate with an output,a second logic gate with an output, and a mutiplexer allowing selectionbetween the two logic gate outputs.

According to an eighth aspect of the invention, a CLB has two or moreslices. Each of the slices has a first configurable function generatorgenerating a first output, a second configurable function generatorgenerating a second output, and a dedicated function generator forreceiving the first output and the second output to generate a dedicatedoutput. The dedicated function generator includes a first logic gate anda second logic gate. The CLB also has a second-level circuit forcombining the dedicated outputs from its slices.

Other aspects and advantages of the present invention will becomeapparent from the following detailed description, taken in conjunctionwith the accompanying drawings, illustrating by way of example theprinciples of the invention.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1A illustrates a conventional configurable logic block (CLB);

FIG. 1B illustrates another conventional configurable logic block (CLB);

FIG. 2 is a flowchart illustrating a process of decomposing combinationlogic by sharing literals;

FIG. 3A illustrates a CLB slice configured to implement a sample productterm;

FIG. 3B illustrates a CLB slice configured to implement a sample productchain;

FIG. 4A illustrates a CLB implementation of a sample combinational logiccircuit;

FIG. 4B illustrates a computing system programmed to performliteral-sharing decomposition of combinational logic;

FIG. 5 illustrates one embodiment of a CLB in accordance with thepresent invention, including a second-level logic circuit;

FIG. 6 illustrates an alternative embodiment of a CLB in accordance withthe present invention, including a second-level logic circuit within CLBslices;

FIG. 7A illustrates another embodiment of a CLB in accordance with thepresent invention, including a dedicated function generator within eachslice;

FIG. 7B illustrates a CLB having both a dedicated function generatorwithin each slice and a second-level logic circuit within the CLB; and

FIG. 7C illustrates a CLB having both a dedicated function generator anda combining gate within each CLB slice.

DETAILED DESCRIPTION

As shown in the drawings, the invention is embodied in a method ofdecomposing wide-fan-in combinational logic circuit designs forimplementation using configurable logic block (CLB) slices havinglow-fan-in LUTS. The decomposition technique is based on the fact thatsimilar input patterns of the combinational logic may be shared amongslices to reduce the number of LUTs required to implement thecombinational logic. After the decomposition, the combinational logiccan be implemented using fewer slices. Reducing the required number ofslices improves area efficiency, and the resulting reduction in signalpropagation delay improves speed performance.

CLBs in accordance with one embodiment of the invention are adapted toinclude dedicated logic to combine the outputs of CLB slices. Thededicated logic, which may be a “second-level logic circuit” in oneembodiment, replaces look-up-table logic conventionally used to combineslice outputs when implementing wide fan-in functions. Reducing the needfor look-up-table logic improves speed performance and reduces thenumber of slices required to implement many SOP expressions. In anotherembodiment, slices include the combining gate. In this case, thecombining gate of a first slice may be serially connected to thecombining gate of a second slice. Still other embodiments include sliceswith dedicated function generators in each slice. The dedicated functiongenerators efficiently combine the outputs of respective first andsecond function generators.

Section 1: Literal-Sharing Decomposition

For purposes of explaining the literal-sharing decomposition techniqueof the present invention, a sample combinational logic circuit havingfifteen input signals and one output signal is used. The samplecombinational logic circuit may be described using a Boolean expressionshown as EQ.1 below where the fifteen input signals are represented bynumbers 1 through F, each having one of two Boolean values 0 or 1. EQ.1below expresses the sample combinational logic circuit in SOP formatusing conventional logic symbols including “+” for the OR operation, “.”for the AND operation, and “˜” for the NOT operation. For convenience,the Pterms are referred to as P1, P2, . . . P7. Pterms P1, P2, P3, andP4 have five literals each, Pterms P5 and P6 have seven literals each,and Pterm P7 has eight literals. $\begin{matrix}{{{EQ}{.1}} = {\left( {\sim 1. \sim 3. \sim {4.5.} \sim E} \right) + \left( {\sim 3. \sim {4.5.} \sim {C.} \sim E} \right) +}} \\{\left( {\sim 3. \sim {4.5.} \sim {D.} \sim E} \right) + \left( {\sim 3. \sim {4.5.} \sim {E.} \sim F} \right) +} \\{\left( {\sim 2. \sim 3. \sim {4.5{.8}{{.9}.}} \sim E} \right) + \left( {\sim 3. \sim {4.5{{.8}.A.}} \sim {B.} \sim E} \right) +} \\{\left( {\sim 3. \sim {4.5{.6}{.7}{.8}{{.9}.}} \sim E} \right)} \\{= {{P1} + {P2} + {P3} + {P4} + {P5} + {P6} + {P7}}}\end{matrix}$where P1 = ( ∼ 1. ∼ 3. ∼ 4.5. ∼ E); P2 = ( ∼ 3. ∼ 4.5. ∼ C. ∼ E);P3 = ( ∼ 3. ∼ 4.5. ∼ D. ∼ E); P4 = ( ∼ 3. ∼ 4.5. ∼ E. ∼ F);P5 = (2. ∼ 3. ∼ 4.5.8.9. ∼ E); P6 = ( ∼ 3. ∼ 4.5.8.A. ∼ B. ∼ E);  andP7 = ( ∼ 3. ∼ 4.5.6.7.8.9. ∼ E).

Equation EQ.1 can be expressed as a personality matrix, as shown belowin TABLE 1. The columns of the personality matrix are associated withthe inputs of a given function, each column corresponding to an inputsignal or line. The rows P1 through P7 of the personality matrixcorrespond to the product terms (“Pterms”) of the circuit expressed as asum-of-products. In the example of Table 1, Pterm P1 produces a logicone output if lines 1, 3, 4, and E express logic zeros and line 5expresses a logic one. The remaining inputs lines, designated as “-” forPterm P1, are “don't care” bits, and do not affect the result. The Ptermresults for each Pterm P1-P7 are summed (i.e., AND'ed) to generate anoutput result of the combinational logic circuit. Therefore, the numberof inputs, or variables, in the SOP expression equals the number ofcolumns, and the number of Pterms equals the number of rows of thecorresponding personality matrix.

TABLE 1 (PERSONALITY MATRIX OF EQ. 1) Input Lines Pterm Pterms 1 2 3 4 56 7 8 9 A B C D E F Result P1 0 — 0 0 1 — — — — — — — — 0 — 1 P2 — — 0 01 — — — — — — 0 — 0 — 1 P3 — — 0 0 1 — — — — — — — 0 0 — 1 P4 — — 0 0 1— — — — — — — — 0 0 1 P5 — 1 0 0 1 — — 1 1 — — — — 0 — 1 P6 — — 0 0 1 —— 1 — 1 0 — — 0 — 1 P7 — — 0 0 1 1 1 1 1 — — — — 0 — 1

The personality matrix for the sample circuit EQ.1 is relatively sparse.That is, the number of literals of the personality matrix is relativelylow compared to the total number of input signals. Experimental resultsshow that sparse personality matrices are common for combinational logiccircuits.

To implement EQ.1 under the current art, each of the Pterms must beimplemented in its own CLB slice. This is because each Pterm has five toeight input signals, or fan-ins. In addition, the sum operation (to sumthe Pterm results) must be implemented within another slice, bringingthe total number of the required slices to eight. Thus, implementationof the above example would require four CLBs each having two slices ortwo CLBs each having four slices.

A decomposition technique in accordance with the invention reduces thenumber of slices required to implement the sample personality matrix bycombining Pterms. This is possible because Pterms may share literals andpatterns of literals. Sharing of literals allows Pterms to share slices,resulting in more efficient use of resources. In one embodiment, Ptermsare summed if the resultant product chain can be implemented using thesame number of slices as one of the summed Pterms. A “product chain” isa combination of Pterms that share one or more literals. A product chainwould typically include at least two Pterms; however, a single Pterm maybe designated as a product chain with which other Pterms may becombined. A Pterm or a product chain may be implemented on one or moreCLB slices. A “slice chain” is one or more slices configured toimplement a Pterm or a product chain.

FIG. 2 is a flowchart 200 illustrating the process of decomposing a widefan-in circuit design expressed in SOP format. Circuit designsexpressible in SOP format are also expressible in Berkeley LogicInterchange Format (BLIF) using a “personality matrix.” To share theliteral patterns, first the personality matrix is sorted in descendingorder based on the number of literals present for each Pterm (operation202) (The sorting process may not be required.) Then, the first Pterm isidentified as a first product chain. The remaining Pterms are analyzedin the sorted order as discussed below.

TABLE 2 illustrates a result of the sorting operation performed on theexpression of TABLE 1. Pterm P7 has the highest number of literals(eight), and therefore moves to the top of the personality matrix. Thenext two Pterms are Pterms P5 and P6, each having seven literals. PtermsP1, P2, P3, and P4 follow with five literals each.

TABLE 2 (SORTED PERSONALITY MATRIX) n^(th) Input Lines Row Pterm 1 2 3 45 6 7 8 9 A B C D E F Result 1 P7 — — 0 0 1 1 1 1 1 — — — — 0 — 1 2 P5 —1 0 0 1 — — 1 1 — — — — 0 — 1 3 P6 — — 0 0 1 — — 1 — 1 0 — — 0 — 1 4 P10 — 0 0 1 — — — — — — — — 0 — 1 5 P2 — — 0 0 1 — — — — — — 0 — 0 — 1 6P3 — — 0 0 1 — — — — — — — 0 0 — 1 7 P4 — — 0 0 1 — — — — — — — — 0 0 1

The first row, P7, is defined as a new product chain (operation 204).Here, the product chain P7, “Chain P7,” requires one slice having twofour-input LUTs for implementation.

FIG. 3A illustrates a portion of a conventional slice 300 configured toimplement the product expressed by Chain P7. Slice 300 includes a pairof four-input LUTs 305 and 310 and carry logic 316. The input terminalsof LUTs 305 and 310 are connected to like-numbered input terminalsidentified in the matrices of Tables 1 and 2. Carry logic 316 is used asan AND gate having input terminals connected to the respective outputterminals of LUTs 305 and 310.

LUTs 305 and 310 can be combined with carry logic 316 to perform logicfunctions of up to nine literals. Chain P7 has fewer than nine literals.Therefore, Chain P7 can be implemented in one slice. At this stage ofthe decomposition process, Chain P7 is the only existing product chainand consists of only one Pterm P7.

Next, each remaining row is examined (decisions and operations from 206through 226 of FIG. 2) in turn, to determine whether the row beingexamined (the “current row”) fits into any existing product chain(decision 212). Each remaining row is analyzed as follows:

The next row is defined as the current row for examination (operation208). The current row is examined to determine whether the current rowfits into any of the existing product chains (decision 212). The currentrow fits into a product chain if the combined product chain (the productchain+the current row) can be implemented on the same number of slicesas the product chain itself.

Returning to the example, at decision operation 212 of FIG. 2, thecurrent row is Pterm P5 and the only existing product chain consists ofPterm P7. As shown in FIG. 3A, the Chain P7 can be implemented on asingle slice 300. Pterm P5 fits Chain P7 if the combination of Chain P7and Pterm P5 (hereinafter “Chain P7+P5”) can be implemented on a singleslice.

Here, Chain P7+P5 can be implemented on a single slice 300 as shown inFIG. 3B. Chain P7+P5 can be implemented on a single slice because ChainP7+P5 requires only nine literals. Even though Chain P7 requires eightliterals and Pterm P5 requires seven literals, six literals are commonbetween Chain P7 and Pterm P5, leaving only three non-shared literals.To share the literals, both the literals and the functions of the sharedliterals must be shared.

Pterms P7 and P5 share literals 3, 4, 5, 8, 9, and E. That is, bothPterms P7 and P5 use literals 3, 4, 5, 8, 9, and E in the same way todetermine their respective results.

Referring to FIG. 3B, slice 320 implements chain P7+P5 by configuring afirst LUT 325 to implement shared literals 3, 4, 5, and 8. A second LUT330 is configured to implement non-shared literals 2, 6, and 7 as wellas to implement one shared literal E. Non-shared literals are literalsthat are not common to the Pterms or product chains being compared.Finally, the remaining shared literal 9 is implemented using carrycircuit 326. In order to combine a Pterm to a product chain, the numberof non-shared literals between the Pterm and the product chain must beless than or equal to the number of inputs of a LUT. In the presentexample, this number is four.

In general, a row fits into a product chain if either of the followingtwo criteria is met:

-   -   (1) the carry circuit of a slice configured to implement the        product chain is used as an OR gate; and        -   the row can be added to one of the LUTs (that is, the            composite number of literal inputs to the row and the LUT is            less than or equal to 4); or    -   (2) the carry circuit of a slice configured to implement the        product chain is used as an AND gate; and        -   the number of non-shared literals between the product chain            and the row is 4 or less.

Using these criteria, the relationship between Chain P7 and Pterm P5 maybe examined in detail. After the operations 202 to 208 of FIG. 2, ChainP7 is the only product chain. Chain P7, having eight literals, may beimplemented on a single slice having two LUTs, as depicted in FIG. 3A.Carry circuit 316 in this case must be an AND gate to perform theproduct function on the input lines. Because P7 only has eight literals,the ninth input, the carry input, is not used. Slice 310 also includes aprogrammable output control block; however, to avoid clutter, the outputcontrol block is not illustrated in the figure.

Referring again to FIG. 2 and continuing to refer to FIG. 3A, next, thesecond row, Pterm P5, becomes the current row (operation 208). Todetermine whether the current row fits Chain P7 (decision 212), theabove-described two criteria are examined. In this case, because carrycircuit 316 of Chain P7 is an AND gate, the criterion (1) is not met.The current row fits Chain P7 under the criterion (2) because carrycircuit 316 of Chain P7 is an AND gate and the number of non-sharedliterals is only three.

Here, Chain P7 and Pterm P5 share literals 3, 4, 5, 8, 9, and E. ChainP7 and Pterm P5 do not share literals 2, 6, and 7. The relationshipbetween Chain P7 and Pterm P5 may be expressed using the SOP format andlogic symbols as: $\begin{matrix}{{\left( {{Chain}\mspace{14mu}{P7}} \right)\mspace{14mu}{OR}\mspace{14mu}\left( {{Pterm}\mspace{14mu}{P5}} \right)} = {\left( {\sim 3. \sim {4.5{.6}{.7}{.8}{{.9}.}} \sim E} \right) +}} \\{\left( {2. \sim 3. \sim {4.5{.8}{{.9}.}} \sim E} \right)}\end{matrix}$ $\begin{matrix}{\mspace{14mu}{\begin{matrix}{{factoring}\mspace{14mu}{out}\mspace{14mu}{the}\mspace{14mu}{shared}} \\{{literals}\mspace{14mu}{results}\mspace{14mu}{in}}\end{matrix} = {\left( {\sim 3. \sim {4.5{.6}{.7}{.8}{{.9}.}} \sim E} \right) \cdot \left( {(6.7) + 2} \right)}}} \\{= {{shared}\mspace{14mu}{{literals} \cdot}}} \\{\left( {{sum}\mspace{14mu}{of}\mspace{14mu}{non}\text{-}{shared}\mspace{14mu}{literals}} \right)}\end{matrix}$

There are only three non-shared literals—2, 6, and 7. This fact,combined with the fact that carry circuit 316 of Chain P7 is an ANDgate, satisfies criterion (2). Accordingly, P5 fits Chain P7 (operation212).

If the current row fits at least one of the existing product chains,then the current row is combined into the product chain (operation 220).If there is no product chain to which the current row fits, then thecurrent row becomes a new product chain (operation 214).

In this example, the current row, P5, fits Chain P7. In the next step,step 222, all product chains to which the current row fits areidentified. Here, there is only one product chain, Chain P7. However, ifmultiple product chains are identified as fitting the current row of thePterm, then the optimal product chain is selected by selecting theproduct chain for which increase in the number of inputs is minimal ifcombined with the current row (operation 224).

Following the selection of the product chain, the current row iscombined into the selected product chain (operation 226). In thispresent example, Chain P7 and Pterm P5 are combined to create a newproduct chain, Chain P7+P5 (operation 226). TABLE 3 below shows ChainP7+P5. Note that, with nine input literals, implementation of ChainP7+P5 requires the use of the carry circuit.

TABLE 3 (Chain P7 + P5) Input Lines Chain 1 2 3 4 5 6 7 8 9 A B C D E FP7 + P5 — 1 0 0 1 1 1 1 1 — — — — 0 —

As indicated by loop 216, the above-described process is repeated foreach of the remaining rows. For example, the next current row is row 3,Pterm P6 (operation 208). Then, P6 is compared with Chain P7+P5 todetermine the fit at operation 212. P6 does not fit Chain P7+P5 becauseP6 requires two more literals, A and B, and chain P7+P5 can notaccommodate any more literals and still fit within the same number ofslices. Accordingly, a new product chain, Chain P6 is defined (operation214).

Next, the 4^(th) row of the sorted matrix, Pterm P1, becomes the currentrow (operation 208). Then, P1 is compared with Chain P7+P5 and withChain P6 to determine the fit at operation 212. P1 fits Chain P6 undercriterion (2). Thus, P1 is combined with Chain P6 to generate ChainP6+P1 (operation 220).

These operations are repeated until no more rows are remaining in thesorted matrix. The process then terminates as indicated by terminator210 of the flowchart 200.

Analysis of the sorted matrix TABLE 2 under the present techniqueresults in the product chains listed in TABLE 4.

TABLE 4 (RESULTANT PRODUCT CHAINS) Input Lines Chain 1 2 3 4 5 6 7 8 9 AB C D E F P7 + P5 — 1 0 0 1 1 1 1 1 — — — — 0 — P6 + P1 0 — 0 0 1 — — 1— 1 0 — — 0 — P2 + P3 + P4 — — 0 0 1 — — — — — — 0 0 0 0

FIG. 4A illustrates a CLB 400 implementing the product chains listed inTABLE 4. CLB 400 includes four slices 410, 420, 430, and 440. Firstslice 410 is configured to implement Chain P7+P5. The non-sharedliterals—literals 2, 6, and 7—and one of the shared literals, E, areimplemented using a LUT 412. The remaining five shared literals—literals3, 4, 5, 8, and 9—are implemented using a combination of a LUT 414 and acarry circuit 416. First slice 410 generates a sum of the Pterms for P7and P5 as its output, S1-out.

First and second configurable function generators 412 and 414 arecommonly implemented using look-up-tables (LUTs). Third configurablefunction generator 416 is typically a set of multiplexers, flip-flops,or both, designed to handle carry bits but also configurable to performas a bypass, an inverter, an AND gate, or an OR gate.

Second slice 420 is configured to implement Chain P6+P1. The non-sharedliterals—1, 8, A, and B—are implemented using LUT 422. The sharedliterals—3, 4, 5, and E—are implemented using LUT 424. Carry circuit 426is used as an AND gate to generate a product of the outputs of LUTs 422and 424. Second slice 420 generates a sum of the Pterms for P1 and P6 asits output, S2-out.

Third slice 430 is configured to implement Chain P2+P3+P4. Thenon-shared literals—literals C, D, and F—are implemented using LUT 432.The shared literals—literals 3, 4, 5, and E—are implemented using LUT434. Carry circuit 436 is used as an AND gate to generate a product ofthe outputs of LUTs 432 and 434. Third slice 430 generates a sum of thePterms for P2, P3, and P4 as its output, S3-out.

For the sample combinational logic circuit represented by equation EQ.1,carry circuits 416, 426, and 436 are utilized for the logical ANDfunction. However, as already discussed, the carry circuits may beadapted as a bypass, an inverter, an AND gate, or an OR gate.

To complete the sum-of-products function of the sample circuitrepresented by equation EQ.1, fourth slice 440 may be configured to sumthe outputs from the previous three slices 410, 420, and 430. For thesum function, LUT 442 may be configured to take the three sliceoutputs—S1-out, S2-out, and S3-out—as input to generate a sum 445. Here,LUT 444 is not used, and carry circuit 446 may be used as a bypasscircuit. Thus, the resultant signal of fourth slice 440 becomes theoutput of CLB 400, SOP-out.

FIG. 4B illustrates a computing system 230 having a processor 234 andstorage 236. Storage 236 may be connected to processor 234 via a bus238. Storage 236 includes a program that, when executed by the processor234, causes system 230 to decompose combinational logic circuitsexpressed in sum-of-products format. The program implements theliteral-sharing decomposition technique discussed above. System 230 maybe connected to a display 240 for user interface. Storage 236 may becomputer memory such as random access memory (RAM) or more permanentstorage such as magnetic, optical, or other forms of machine storage.

As described, the literal-sharing decomposition allows combinationallogic to be implemented using a reduced number of CLB slices. Thisreduction leads to reductions in both the logic delay and the routingdelay, thus increasing the circuit performance. Moreover, the reductionin the number of required CLB slices saves FPGA area. In summary,applying literal-sharing decomposition techniques leads to fasterimplementation of logic circuits.

Section 2: CLB with a Second-Level Logic Circuit

The performance of the combinational logic circuits implementingsum-of-product functions may be further increased by adding asecond-level logic circuit to a CLB. FIG. 5 illustrates a CLB 500 havingfour slices 510, 520, 530, and 540. CLB 500 also includes a second-levellogic circuit 570. In the depicted embodiment, second-level logiccircuit 570 is separate from slices 510, 520, 530, and 540.

In one embodiment, second-level circuit 570 may be an OR gate or itslogical equivalent such as an inverted-input NAND gate (NND4) 570 asillustrated. Second-level circuit 570 preferably has the same number ofinputs as the number of slices in CLB 500, four in the illustrated CLB500.

To aid the discussion, CLB 500 is configured to implement the samplecombination logic circuit represented by equation EQ.1 and thepersonality matrix of TABLE 1. First slice 510 implements Chain P5+P7and generates S1-out, the sum of Pterms P7 and P5. Second slice 520implements Chain P1+P6 and generates S2-out, the sum of Pterms P1 andP6. Third slice 530 implements Chain P2+P3+P4 and generates S3-out, thesum of Pterms P2, P3, and P4. NND4 circuit 570 sums the threeoutputs—S1-out, S2-out, and S3-out—to generate the final sum-of-productssignal 575. Fourth slice 540 is not used in the present example.

The advantages of the present CLB design are numerous. First, NND4circuit 570 frees up fourth slice 540, allowing CLB 500 to handle evenwider fan-in nodes. Second, for combinational logic designs requiringall four slices to implement its Pterms, NND4 circuit 570 eliminates theneed for another CLB slice that would have been required to perform thesum function but for NND4 circuit 570. Using another CLB slice wouldhave increased the logic delay, the routing delay, and the arearequirement. Finally, even for combinational logic that fits entirelywithin a single CLB, such as the case with the sample combinationallogic circuit represented by equation EQ.1, NND4 circuit 570 increasesthe performance of the circuit because NND4 circuit 570 uses dedicatedhardware, and therefore performs the sum operation faster than aconfigured LUT.

CLB 500 of FIG. 5 includes four slices 510, 520, 530, and 540. However,the CLB may contain any number of slices.

Section 3: CLB Slices with Combining Gate

FIG. 6 illustrates an alternative embodiment of a CLB 600 forimplementing SOP expressions. CLB 600 includes four similar slices 610,620, 630, and 640. Each of the four slices 610, 620, 630, and 640 of theCLB 600 includes a combining gate in addition to the configurablefunction generators already discussed above.

Slice 610 includes configurable function generators 612, 614, and 616.As already discussed, configurable function generators 612 and 614 maybe implemented as LUTs, and configurable function generator 616 may beimplemented using multiplexers, flip-flops, or both. Configurablefunction generators 612, 614, or 616 receive a plurality of inputs andgenerate an output 617 which may be routed to one of two inputs of acombining gate 650 a. In the one embodiment, combining gate 650 a is atwo-input OR gate (or a two-input NAND gate with inverted inputs,“NND2”). NND2 circuit 650 a combines the output 617 with a combininggate input 605. Combining gate input 605 may be from a previous CLB or aprevious slice. Application of combining gate input signal 605 may becontrolled using a multiplexer 645 a. If combining gate input 605 isneither available nor needed, then multiplexer 645 a may be programmedto pass a zero value rather than combining gate input 605. NND2 circuit650 a generates an output 651 a that is, in this configuration, a sum ofits two inputs.

Other slices 620, 630, and 640 are likewise designed, each having theirrespective combining gates connected in series within the combining gateof a previous slice. That is, output 651 a of NND2 circuit 650 a offirst slice 610 is the combining gate input to NND2 circuit 650 b ofsecond slice 620. NND2 circuit 650 b generates output signal 651 b. Thesignal 651 b of NND2 circuit 650 b of second slice 620 is the combininggate input to NND2 circuit 650 c of third slice 630. NND2 circuit 650 cgenerates output signal 651 c. The signal 651 c of NND2 circuit 650 c ofthird slice 630 is the combining gate input to NND2 circuit 650 d offourth slice 640. NND2 circuit 650 d generates output signal 651 d.These serially connected combining gates at each slice sum therespective Pterm of the slice and all the Pterms of the precedingslices. Accordingly, output signal 651 d of fourth slice 640 is the sumof all the Pterms of the combinational logic being implemented. Theserial connection inputs of NND2 gates 650 a, 650 b, 650 c, and 650 c,may be controlled by multiplexers 645 a, 645 b, 645 c, and 645 d,respectively, as discussed above in reference to multiplexer 645 a.

This alternative embodiment of CLB 600 allows multiple CLBs to beconnected serially to implement very wide fan-in nodes. This is possiblebecause every slice of CLB 600 includes a combining gate, each taking acombining gate input. Moreover, the alternative embodiment of CLB 600may have manufacturing advantages because the combining gates existwithin the slices, not separated from the slices. This allows the slicesto be identical, making the circuit easier to scale.

As illustrated, CLB 600 of FIG. 6 includes four slices 610, 620, 630,and 640. However, CLB 600 may contain any number of slices and stillprovide advantages of the present invention.

Section 4: Dedicated Function Generator

The performance of the FPGA-implemented circuits may be increased evenfurther by using a dedicated function generator (instead of a third LUTor a third function generator (the carry circuit)) to combine theresults from the first two function generators (LUTs). As illustrated inFIGS. 1A and 1B, a third LUT 113 of FIG. 1B or a third functiongenerator (carry circuit) 116 of FIG. 1A may be used as a bypass, aninverter, an AND gate, or an OR gate.

The same four operations—bypass, invert, AND, or OR—can be performedfaster if a dedicated function generator is used. FIG. 7A depicts aportion of a CLB 700, including a slice 710 having a dedicated functiongenerator 760. Only first slice 710 of CLB 700 is shown; the remainingslices are the same and are omitted for simplicity.

Slice 710 includes first and second function generators (LUTS) 712 and714, third function generator (carry circuit) 716 and output controlblock 718. First LUT 712 is designated G and generates output G′. SecondLUT 714 is designated F and generates output F′. Dedicated functiongenerator 760 of slice 710 includes a two-input NOR 762, a two-inputNAND 764, and a function select multiplexer 766. NAND gate 764 providesproduct F′.G′. NOR gate 762 provides sum F′+G′. The product and the sumare inputs to function select multiplexer 766. Function selectmultiplexer 766 may be configured to select the product or the sum asits output. With additional inputs signals 1 and Sout, function selectmultiplexer 766 can also serve as a bypass or an inverter. Mutiplexer766 determines the output of dedicated function generator 760. The Soutinput of multiplexer 766 allows the slices of CLB 700 to be seriallyconnected to accommodate implementation of very wide functions. Becausededicated function generator 760 is implemented using dedicated gates,it requires less space and operates much faster than a LUT basedimplementation such as LUT 113 of FIG. 1B.

Section 5: Combining Slices with Dedicated Function Generator and CLBSecond-Level Logic

An embodiment of the present invention having an alternative design isshown in FIG. 7B. Portions of this embodiment are similar to those shownin FIGS. 7A and 5. For convenience, components in FIG. 7B that aresimilar to components in FIG. 7A or 5 are assigned the same referencenumerals, analogous but changed components are assigned the samereference numerals accompanied by letter “b,” and different componentsare assigned different reference numerals.

A CLB 700 b includes a slice 710 having a dedicated function generator760 and having an output Sout 719. CLB 700 b further includes asecond-level logic circuit 770 that combines the outputs 719 and 729.Second-level logic circuit 770 operates as discussed in Section 2 aboveand in connection with FIG. 5. In this implementation, output 717 ofdedicated function generator 760 bypasses output control block 718 toconnect directly with second-level logic circuit 770. Thisimplementation leads to even faster operation of the CLB 700 b. CLB 700b may include other slices or circuits as indicated by ellipsis 702,each of the other slices 702 may have a dedicated function generatorhaving an output 729 connected to second-level logic circuit 770.

Section 6: Combining Dedicated Function Generator and Combining GateWithin a Slice

FIG. 7C depicts a CLB 700 c in accordance with another embodiment.Portions of this embodiment are similar to those shown in FIG. 7A. Forconvenience, components in FIG. 7C that are similar to components inFIG. 7A are assigned the same reference numerals, analogous but changedcomponents are assigned the same reference numerals accompanied byletter “c,” and different components are assigned different referencenumerals.

Referring to FIG. 7C, a CLB 700 c includes a slice 710 c having both adedicated function generator 760 and a combining gate 750 within slice710 c. Combining gate 750 may be an OR gate as shown, a NAND gate withinverted inputs(see gate 650 a in FIG. 6), a NAND gate without invertedinputs, or another appropriate circuit. A combining gate input 705,switched via a multiplexer 745 may be combined with output of dedicatedfunction generator 760 to sum or to multiply the output of dedicatedfunction generator 760 with combining gate input 705. Dedicated functiongenerator 760 operates as discussed in Section 4 above and in connectionwith FIG. 7A. The combining gate 750 within the slice 710 c operates asdiscussed in Section 3 above and in connection with FIG. 6.

CONCLUSION

From the foregoing, it will be appreciated that higher performanceimplementations of combinational logic circuits may be realized bydecomposing the combinational logic using the literal-sharing techniquedescribed above. The performance can be further increased by utilizingCLBs having second-level logic circuits. As described, second-levellogic circuits may be fabricated within the CLB but external to theslices. Alternatively, combining gates may be fabricated within theslices. Even further performance gains can be achieved by providing adedicated function generator to each slice. The dedicated functiongenerator efficiently combines the outputs of first and second functiongenerators. The literal-sharing technique, the second-level logiccircuits, and the dedicated function generator can be used alone, or inany combination, to realize higher performance implementations ofcombinational logic circuits on an FPGA.

Although several specific embodiments of the invention are described andillustrated above, the invention is not to be limited to the specificforms or arrangements of parts so described and illustrated. Forexample, the literal-sharing technique may be used to improveperformance of combinational logic circuits implemented in anytechnology, and is not limited to FPGAs. Further, the second-level logicgates may perform any logic function, and are not limited to the sumfunction. The invention is limited only by the claims that follow.

1. A literal-sharing decomposition method for implementing acombinational logic function expressed in sum-of-products format havingproduct terms, the method comprising: a. identifying a product termhaving a most number of literals; b. defining the identified productterm as a product chain; c. selecting, from remaining product terms,another product term having a next most number of literals; d.performing, for the selected product term, the following: i. determiningwhether the selected product term fits into any product chain; ii.defining the selected product term as a new product chain if theselected product term does not fit into any product chain; iii.combining the selected product term into one of the product chains ifthe selected product term fits into any existing product chain; and e.repeating steps c and d until all the remaining product terms have beenselected.
 2. The method recited in claim 1 wherein each of the productchains can be implemented on at least one configurable logic block slicehaving configurable function generators including lookup tables (LUTs)and a carry circuit, and wherein the step of determining whether theselected product term fits into any product chain comprises the step ofdetermining, for the selected product term and a product chain, thefollowing: a. whether the carry circuit of a slice within the productchain is used as an OR gate or as an AND gate; b. whether the selectedproduct term can be added to a LUT within the product chain; and c.whether a sum of non-shared literals between the product chain and theselected product term is bounded within a predetermined bound limit. 3.The method recited in claim 2 wherein the selected product term can beadded to a LUT within the product chain if the number of literals of theselected product term is less than or equal to a predetermined number.4. The method recited in claim 3 wherein the predetermined number isfour.
 5. The method recited in claim 2 wherein the predetermined boundlimit is four.
 6. The method recited in claim 1 wherein the step ofcombining the selected product term into one of the product chainsdefined if the selected product term fits into any existing productchain comprises: identifying all product chains to which the selectedproduct term fits; selecting a product chain from all product chains;and joining the selected product term with the selected product chain.7. The method recited in claim 6 wherein the step of identifying allproduct chains to which the selected product term fits comprises thestep of comparing the selected product term with each of the productchains.
 8. The method recited in claim 6 wherein the step of selecting aproduct chain comprises the step of selecting a product chain for whichincrease in the number of literals when the selected product term iscombined with the selected product chain is minimum.
 9. A programmablelogic device (PLD) configured to implement a combinational logicfunction mapped to the PLD in accordance with the method of claim
 1. 10.A literal-sharing decomposition method for a combinational logicfunction expressed in sum-of-products format having product terms, saidmethod comprising: a. identifying a product term having a most number ofliterals; b. defining the identified product term as a product chain; c.ordering all other product terms in descending order of number ofliterals of each product term; d. performing, for each row in the order,the following: i. defining the following product term as a currentproduct term; ii. determining whether the current product term fits intoany product chain; iii. defining the current product term as a newproduct chain if the current product term does not fit into any productchain; and iv. combining the current product term into one of theproduct chains if the current product term fits into any existingproduct chain.
 11. A literal-sharing decomposition method for acombinational logic function, said method comprising: a. forming apersonality matrix for the combinational logic, the personality matrixhaving rows comprising literals; b. sorting the personality matrix indescending order of number of literals in each row, resulting in asorted matrix having a first row and a last row; c. defining the firstrow as a product chain; d. performing, for rows following the first row,the following: i. defining the following row as a current row; ii.determining whether the current row fits into any product chain; iii. ifthe current row does not fit into any product chain, defining thecurrent row as a new product chain; and iv. if the current row fits intoany existing product chain, combining the current row into one of theproduct chains.
 12. A technology mapping system comprising: a processor;a storage connected to the processor; and a program stored in thestorage, the program having instructions that when executed by theprocessor cause the system to decompose a combinational logic functionexpressed in sum-of-products format having a product term by a.identifying a product term having a most number of literals; b. definingthe identified product term as a product chain; c. selecting, fromremaining product terms, another product term having a most number ofliterals; d. performing, for the selected product term, the following:i. determining whether the selected product term fits into any productchain; ii. if the selected product term does not fit into any productchain, defining the selected product term as a new product chain; iii.if the selected product term fits into any existing product chain,combining the selected product term into one of the product chains; ande. repeating steps c and d until all product the remaining terms havebeen selected.
 13. An article of manufacture for a computer, the articlecomprising: a computer memory; and a program stored in the computermemory, the program, when executed, causing the computer to decompose acombinational logic function expressed in sum-of-products format havinga product term by: a. identifying a product term having a most number ofliterals; b. defining the identified product term as a product chain; c.selecting from remaining product terms another product term having anext most number of literals; d. performing, for the selected productterm, the following: i. determining whether the selected product termfits into any product chain; ii. if the selected product term does notfit into any product chain, defining the selected product term as a newproduct chain; iii. if the selected product term fits into any existingproduct chain, combining the selected product term into one of theproduct chains; and e. repeating steps c and d until all the remainingproduct terms have been selected.